' ClipboardDemo.bas
#PBFORMS CREATED V2.01
'------------------------------------------------------------------------------
' The first line in this file is a PB/Forms metastatement.
' It should ALWAYS be the first line of the file. Other
' PB/Forms metastatements are placed at the beginning and
' end of "Named Blocks" of code that should be edited
' with PBForms only. Do not manually edit or delete these
' metastatements or PB/Forms will not be able to reread
' the file correctly.  See the PB/Forms documentation for
' more information.
' Named blocks begin like this:    #PBFORMS BEGIN ...
' Named blocks end like this:      #PBFORMS END ...
' Other PB/Forms metastatements such as:
'     #PBFORMS DECLARATIONS
' are used by PB/Forms to insert additional code.
' Feel free to make changes anywhere else in the file.
'------------------------------------------------------------------------------

#COMPILE EXE
#DIM ALL
#DEBUG ERROR ON
'------------------------------------------------------------------------------
'   ** Includes **
'------------------------------------------------------------------------------
#PBFORMS BEGIN INCLUDES
#RESOURCE "ClipboardDemo.pbr"
%USEMACROS = 1
#INCLUDE ONCE "WIN32API.INC"
#INCLUDE ONCE "COMMCTRL.INC"
#INCLUDE ONCE "PBForms.INC"
#PBFORMS END INCLUDES
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Constants **
'------------------------------------------------------------------------------
#PBFORMS BEGIN CONSTANTS
%IDD_dlgClipboardDemo     =  101
%IDC_txtData              = 1001
%IDC_btnCopyToClipboard   = 1002
%IDC_btnCopyFromClipboard = 1003
%IDC_GRAPHIC1             = 1004
%IDC_btnCopyImage         = 1005
#PBFORMS END CONSTANTS
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Declarations **
'------------------------------------------------------------------------------
DECLARE CALLBACK FUNCTION ShowdlgClipboardDemoProc()
DECLARE FUNCTION ShowdlgClipboardDemo(BYVAL hParent AS DWORD) AS LONG
#PBFORMS DECLARATIONS
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Main Application Entry Point **
'------------------------------------------------------------------------------
FUNCTION PBMAIN()
  PBFormsInitComCtls (%ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR _
    %ICC_INTERNET_CLASSES)

  ShowdlgClipboardDemo %HWND_DESKTOP
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** CallBacks **
'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowdlgClipboardDemoProc()
  LOCAL strText AS STRING
  LOCAL lngResult AS LONG
  LOCAL hBitmap AS LONG
  '
  SELECT CASE AS LONG CB.MSG
    CASE %WM_INITDIALOG
      ' Initialization handler

    CASE %WM_NCACTIVATE
      STATIC hWndSaveFocus AS DWORD
      IF ISFALSE CB.WPARAM THEN
        ' Save control focus
        hWndSaveFocus = GetFocus()
      ELSEIF hWndSaveFocus THEN
        ' Restore control focus
        SetFocus(hWndSaveFocus)
        hWndSaveFocus = 0
      END IF

    CASE %WM_COMMAND
      ' Process control notifications
      SELECT CASE AS LONG CB.CTL
        ' /* Inserted by PB/Forms 08-08-2021 12:58:18
        CASE %IDC_btnCopyImage
          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
            CLIPBOARD RESET  ' empty the clipboard
            CONTROL HANDLE CB.HNDL, %IDC_GRAPHIC1 TO hBitmap
            CLIPBOARD SET BITMAP  hBitmap ,lngResult
            IF ISTRUE lngResult THEN
              MSGBOX "Copied to clipboard"
            ELSE
              MSGBOX "Unable to copy to clipboard"
            END IF
            '
          END IF
        ' */

        CASE %IDC_txtData

        CASE %IDC_btnCopyToClipboard
          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
          ' first get the text in the text box
            CONTROL GET TEXT CB.HNDL,%IDC_txtData TO strText
            '
            CLIPBOARD RESET  ' empty the clipboard
            ' and copy the text to the clipboard
            CLIPBOARD SET TEXT strText , lngResult
            '
            IF ISTRUE lngResult THEN
              MSGBOX "Copied to clipboard"
            ELSE
              MSGBOX "Unable to copy to clipboard"
            END IF
            '
          END IF

        CASE %IDC_btnCopyFromClipboard
          IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
            CLIPBOARD GET TEXT strText , lngResult
            IF ISTRUE lngResult THEN
              CONTROL SET TEXT CB.HNDL,%IDC_txtData, strText
            ELSE
              MSGBOX "Unable to copy to clipboard"
            END IF
          END IF

      END SELECT
  END SELECT
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'   ** Dialogs **
'------------------------------------------------------------------------------
FUNCTION ShowdlgClipboardDemo(BYVAL hParent AS DWORD) AS LONG
  LOCAL lRslt AS LONG

#PBFORMS BEGIN DIALOG %IDD_dlgClipboardDemo->->
  LOCAL hDlg  AS DWORD

  DIALOG NEW hParent, "Demo for Clipboard", 357, 182, 543, 306, %WS_POPUP OR _
    %WS_BORDER OR %WS_DLGFRAME OR %WS_CAPTION OR %WS_SYSMENU OR _
    %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_CENTER OR _
    %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR _
    %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
  CONTROL ADD TEXTBOX, hDlg, %IDC_txtData, "", 25, 40, 240, 85, %WS_CHILD OR _
    %WS_VISIBLE OR %WS_TABSTOP OR %WS_VSCROLL OR %ES_LEFT OR %ES_MULTILINE _
    OR %ES_AUTOHSCROLL OR %ES_AUTOVSCROLL OR %ES_WANTRETURN, _
    %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
    %WS_EX_RIGHTSCROLLBAR
  CONTROL ADD BUTTON,  hDlg, %IDC_btnCopyToClipboard, "Copy to Clipboard", _
    290, 40, 125, 15
  CONTROL ADD BUTTON,  hDlg, %IDC_btnCopyFromClipboard, "Copy Clipboard to " + _
    "Text box", 290, 110, 125, 15
  CONTROL ADD GRAPHIC, hDlg, %IDC_GRAPHIC1, "", 25, 145, 240, 105
  CONTROL ADD BUTTON,  hDlg, %IDC_btnCopyImage, "Copy Graphic to Clipboard", _
    290, 185, 125, 15
#PBFORMS END DIALOG
  ' attach the graphic control
  GRAPHIC ATTACH hDlg, %IDC_GRAPHIC1, REDRAW
  GRAPHIC CLEAR %RGB_WHITE,0
  '
  IF ISTRUE funLoadGraphic("Capture.bmp",%IDC_GRAPHIC1) THEN
    ' now draw on graphic
    GRAPHIC SET POS (10,90)
    GRAPHIC COLOR %BLACK , %WHITE
    GRAPHIC PRINT "Created at " & TIME$
    GRAPHIC BOX (170, 65) - (210, 95), 20, %BLUE, RGB(191,191,191), 0
    GRAPHIC REDRAW
  END IF
  '
  DIALOG SHOW MODAL hDlg, CALL ShowdlgClipboardDemoProc TO lRslt

#PBFORMS BEGIN CLEANUP %IDD_dlgClipboardDemo
#PBFORMS END CLEANUP

  FUNCTION = lRslt
END FUNCTION
'------------------------------------------------------------------------------
FUNCTION funLoadGraphic(strFile AS STRING, _
                        lngGraphic AS LONG) AS LONG
' load the image
  LOCAL lngFile AS LONG
  LOCAL lngWidth AS LONG
  LOCAL lngHeight AS LONG
  LOCAL hBmp AS LONG
  '
  IF ISFALSE ISFILE(strFile) THEN EXIT FUNCTION
  '
  lngFile = FREEFILE
  OPEN strFile FOR BINARY AS lngFile
  GET #lngFile, 19, lngWidth
  GET #lngFile, 23, lngHeight
  CLOSE lngFile
  '
  GRAPHIC BITMAP LOAD strFile, lngWidth , lngHeight , _
                      %HALFTONE TO hBmp
  GRAPHIC COPY hBmp, lngGraphic
  GRAPHIC BITMAP END
  GRAPHIC REDRAW
  FUNCTION = %TRUE
'
END FUNCTION